﻿using System;
using System.Collections.Generic;
using System.Windows.Forms;
using EntitiesAndMappings.Entities;
using ProyectoActivos.Daos;
using ProyectoActivos.Util;
using ProyectoActivos.Validate;

namespace ProyectoActivos.Forms.Consultas
{
    public partial class FrmConsultaArticulos : Form, IValidateForm
    {
        public static FrmConsultaArticulos Activo { set; get; }
        private Boolean _valido;
        private ArticuloDAO articuloDAO;

        public FrmConsultaArticulos()
        {
            InitializeComponent();
            this._valido = true;
            dGridResultado.AutoGenerateColumns = false;
            articuloDAO = new ArticuloDAO();
            Activo = this;
        }

        public void Invalid()
        {
            _valido = false;
        }

        public Boolean IsValid()
        {
            return _valido;
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            _valido = true;
            errorProvider.Clear();

            ActionExecutor.Execute(this, delegate
            {
             
                var resultado = articuloDAO.BuscarEnConsulta(new Articulo
                {
                  SubFamilia = (SubFamilia)cmbSubFamilia.SelectedItem,
                  Marca = (Marca)cmbMarca.SelectedItem,
                  TipoMantenimiento  = (TipoMantenimiento)cmbTipoMantenimiento.SelectedItem
                });
                dGridResultado.DataSource = resultado;
            });
        }

        private void FrmConsultaArticulos_Load(object sender, EventArgs e)
        {
            IList<Familia> listadoFamilia;
            IList<Marca> listadoMarca;
            IList<TipoMantenimiento> listadoTipoMantenimiento;


            ActionExecutor.Execute(this, delegate
            {
                var familiaDAO = new EntidadGenericaDAO<Familia>();
                listadoFamilia = familiaDAO.ListarActivos();
                cmbFamilia.DataSource = listadoFamilia;
                cmbFamilia.SelectedItem = null;

                var marcaDAO = new EntidadGenericaDAO<Marca>();
                listadoMarca = marcaDAO.ListarActivos();
                cmbMarca.DataSource = listadoMarca;
                cmbMarca.SelectedItem = null;


                var tipoMantenimientoDAO = new EntidadGenericaDAO<TipoMantenimiento>();
                listadoTipoMantenimiento = tipoMantenimientoDAO.ListarActivos();
                cmbTipoMantenimiento.DataSource = listadoTipoMantenimiento;
                cmbTipoMantenimiento.SelectedItem = null;
        
            });
        }

        private void cmbFamilia_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cmbFamilia.SelectedItem != null)
            {
                var subFamiliaDAO = new SubFamiliaDAO();
                cmbSubFamilia.DataSource = subFamiliaDAO.ListarActivosPorFamilia(((Familia)cmbFamilia.SelectedItem).Id);
                cmbSubFamilia.SelectedItem = null;
            }
            else
            {
                cmbSubFamilia.DataSource = null;
            }
        }

        private void FrmConsultaArticulos_FormClosing(object sender, FormClosingEventArgs e)
        {
            Activo = null;
        }

        private void tStripButtonExportarAExcel_Click(object sender, EventArgs e)
        {
            if (dGridResultado.Rows.Count > 0)
            {
                ActionExecutor.Execute(this, delegate
                {
                    ExcelUtils.ExportarGridAExcel(dGridResultado);
                });
            }
        }

    }
}
